Spring Cloud微服务 | Note(3)
@2018年8月2日 15:13:33
单块架构进化为微服务架构
单块架构
优点:
功能划分清晰;层次关系良好;层层独立;部署简单;相对技术单一;成本低
缺点:
功能太大;升级风险高;维护成本增加;交付周期变长(按系统交付);可伸缩性差;监控困难
微服务架构
随着系统的壮大,单块架构需要转化,转化成每一个服务单元模块,以API交互,平台无关,高内聚低耦合
微服务设计原则(颗粒度设计原则)
Q:什么是微服务
A:服务可以运行在自己进程中(独立部署),轻量级交互机制,例如HTTP交互,服务A和B之间,没有太多的技术关联,可以使用不同的数据存储形式(MySQL或NoSQL)
设计原则
1.拆分足够微(颗粒度):足够小足以即可(亚马逊两个披萨原则,不能太小,不能太大,满足管理成本)
2.轻量级通信:微服务函数之间的调用需要体现跨域、跨主机,同步(REST),异步(消息中间件)
3.领域驱动原则:服务需要体现领域业务模型,减少微服务通用语言的复杂性,使团队理解服务上下文边界(明确了解开发的业务功能)
4.单一职责原则:颗粒度粗(高耦合,不利于维护,修改重合);高内聚,低耦合,对其它服务的依赖要低,单一界限上下文,通过公开的API访问
5.DevOps以及两个披萨:开发团队小而精,且具有全栈能力,降低沟通成本
6.不限于技术栈:与平台无关,根据场景、业务具体选择技术栈
微服务
服务拆分:
·关注服务的颗粒度,颗粒度才用领域驱动设计进行指导,专注某一领域的功能;
服务注册:
·每个微服务,服务之间的通讯实现;服务注册机制(服务注册中心);通过心跳机制获取状态,并且通过状态通知其他服务;
服务发现:
·通过服务名称等找到所需的服务
服务消费:
·调用其他服务的过程;消费者(调用者),提供商(被调用)
统一入口:
·给服务提供方便的服务名称
配置管理:
·定制功能的配置文件不同;
熔断机制:
·系统的防护;阻挡所有的访问,断开某些服务,返回提示信息,保护系统;
自动拓展:
·服务根据负荷状况,进行自动扩展;
微服务拆分:
意义:
·易于实现;利于维护;易于部署,轻量级(Spring Boot内嵌tomcat);易于更新(服务都是隔离的,易于修改、更新、部署)
正向的反馈闭环:
拆分方法:
横向拆分:根据不同的业务功能,拆分成不同的微服务
·数据采集,数据存储,数据查询,数据展示
纵向拆分:把业务中的不同的功能,模块进行拆分
·
使用DDD(驱动设计原则):反映领域的业务模型
·天气数据采集限界上下文:数据采集,数据存储
·天气预报限界上下文:数据展示
·天气数据API限界上下文:数据查询
·城市数据API限界上下文:数据查询
附录
@2018年8月2日 16:20:46